home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / lowlevel / sbfunc.c < prev   
Encoding:
C/C++ Source or Header  |  1997-04-20  |  1.3 KB  |  66 lines

  1. //  Funciones para controlar la SOUND BLASTER desde Turbo-C.
  2. //       en el modo directo.     Por Navi Dj.
  3.  
  4. void interrupt SBDirect();
  5.  
  6. long ticks, contador;
  7. word long_onda;
  8. byte SBON=0, veces=0, ONCE=0;
  9. char *inic_wave;
  10. void interrupt (*oldfunc)();
  11.  
  12. void InicSB(void)
  13. {
  14.  while((inportb(0x22c) & 0x80)!=0);     //  Espera
  15.  outp(0x22c,0xd1);                      //  Speaker ON
  16.  }
  17.  
  18. void EndSB(void)
  19. {
  20.  while((inportb(0x22c) & 0x80)!=0);     //  Espera
  21.  outp(0x22c,0xd3);                      //  Speaker OFF
  22.  }
  23.  
  24. void PLAY(word velocidad, word longitud, char *inicio)
  25. {
  26.  SBON=1;
  27.  long_onda=longitud;
  28.  inic_wave=inicio;
  29.  contador=0x1234DD/velocidad;
  30.  ticks=0;
  31.  
  32.  outp(0x43,0x34);
  33.  outp(0x40,contador % 256);
  34.  outp(0x40,contador/256);
  35.  
  36.  oldfunc=getvect(8);
  37.  setvect(8,SBDirect);
  38.  }
  39.  
  40. void STOP(void)
  41. {
  42.  setvect(8,oldfunc);
  43.  SBON=0;
  44.  
  45.  outp(0x43,0x34);
  46.  outp(0x40,0);
  47.  outp(0x40,0);
  48.  }
  49.  
  50. void PLAY_Once(word velocidad, word longitud, char *inicio)
  51. {
  52.  veces=0; ONCE=1;
  53.  PLAY(velocidad,longitud,inicio);
  54.  }
  55.  
  56. void interrupt SBDirect(void)
  57. {
  58.  while((inportb(0x22c) & 0x80)!=0);   // Espera
  59.  outp(0x22c,0x10);
  60.  while((inportb(0x22c) & 0x80)!=0);   // Espera
  61.  outp(0x22c,*(inic_wave+ticks));
  62.  
  63.  if(++ticks>=long_onda) { ticks=0; veces++; }
  64.  oldfunc();
  65.  }
  66.